Sqlplus连接Oracle出现中文乱码问题以及字符集的选择 |
您所在的位置:网站首页 › cmd连接oracle数据库 乱码 › Sqlplus连接Oracle出现中文乱码问题以及字符集的选择 |
昨天在虚拟机里新装了个Ubuntu,然后今天使用sql/plus时就出现了中文乱码问题,百度一番,终于解决了。 乱码现象如图:
搞定后如图:
常用的字符集: US7ASCII:只能存储美国人使用的字符,26个英文字母,数字,+-*/等等 ZHS16GBK:存储中国人常用的字符 UTF8:unicode字符集,存储全世界的字符,只是不全 AL32UTF8:unicode字符集,比UTF8大多了,unicode字符集使用它,全但性能较差 ALS16UTF16:国家字符集选择它 注意:如果只是中国人使用,ZHS16GBK就足够了,如果是全世界都使用,就使用AL32UTF8 字符集一共有三种:a.操作系统字符集 b.Oracle数据库字符集 c.软件字符集 如果软件有字符集,就不会使用操作系统的字符集;如果没有字符集(比如SQL/PLUS就没有字符集),那么在输入和显示中文时就调用操作系统的字符集来进行编码。SQL/PLUS在输入中文以后,会调用操作系统的字符集将中文转化成编码,然后传递给Oracle数据库,Oracle数据库通过查看nls_language来获取操作系统使用的字符集,如果俩字符集是一致的,那么就会直接将编码存入Oracle数据库;如果不一致,Oracle数据库首先会用nls_lang所表明的字符集将编码转化成字符,然后用Oracle数据库自己的字符集将字符转化成编码存入数据库。总之,所有字符集的转化都是在Oracle端进行的,Oracle数据库在存储数据的时候一定是按照自己的字符集来存储的。 1. NLS_LANG 参数组成 NLS_LANG参数由以下部分组成: NLS_LANG=_. NLS_LANG各部分含义如下: LANGUAGE指定: -Oracle消息使用的语言 -日期中月份和日显示 TERRITORY指定 -货币和数字格式 -地区和计算星期及日期的习惯 CHARACTERSET: -控制客户端应用程序使用的字符集 通常设置或者等于客户端(如Windows)代码页 或者对于unicode应用设置为UTF8 2查看 NLS_LANG 的方法 Windows使用: echo %NLS_LANG% Unix使用: env|grep NLS_LANG 3. 查看数据库当前字符集参数设置 SELECT * FROM v$nls_parameters; 4. 查看数据库可用字符集参数设置 SELECT * FROM v$nls_valid_values; 5. 客户端 NLS_LANG 的设置方法 Windows: # 常用中文字符集 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK # 常用unicode字符集 set NLS_LANG=american_america.AL32UTF8 Unix: # 常用unicode字符集 export NLS_LANG=american_america.AL32UTF8 # 常用中文字符集 export NLS_LANG="Simplified Chinese_china".ZHS16GBK 可以编辑 bash_profile 文件进行永久设置 vi .bash_profile NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG # 使 bash_profile 设置生效 source .bash_profile 6.出现乱码可能存在的原因: 存储错误的字符编码 存储正确的字符编码,但nls_lang设置错了 7.解决方法: 操作系统常用的字符集一共两种,一种是UTF8,还有一种就是中文。windows通过chcp命令来查询操作系统所使用的字符集,如果现实"活动代码页:936",就表示操作系统使用的字符集是中文,这时只要将nls_lang通过Set nls_lang=american_america.zhs16gbk命令设置成GBK即可,总之,NLS_LANG一定要设置成与操作系统字符集一致才不会出现中文乱码或者显示?的问题。
参考资料: Oracle:sqlplus查询出的中文是乱码问题的解决 sqlplus连接oracle乱码 欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |